package com.atguigu.spzx.manager;

import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.atguigu.spzx.model.vo.test.ExcelUserData;
import lombok.extern.slf4j.Slf4j;

import java.util.ArrayList;
import java.util.List;
@Slf4j
//泛型：表示每行数据要转换的对象的类型
public class ExcelUserDataListener extends AnalysisEventListener<ExcelUserData> {
    //缓存集合
    private List<ExcelUserData> list = new ArrayList<>();
    //阈值：一次批量保存的记录条数
    private int limit = 13;
    //每读到一行数据回调一次的处理方法
    @Override
    public void invoke(ExcelUserData data, AnalysisContext context) {
        list.add(data);
        if(list.size()>=limit){
            log.info("正在批量保存数据到数据库.....:{}" , list);
            //清空保存过的数据
            list.clear();
        }
    }
    //excel解析完成后回调一次
    @Override
    public void doAfterAllAnalysed(AnalysisContext context) {
        //如果集合中还有未保存的数据  此时应该保存到数据库中
        if(list.size()>0){
            log.info("解析完成，批量保存数据到数据库.....:{}" , list);
            list.clear();
        }
    }
}
